Network Address Translation (NAT) causes well-known difficulties for peer-to-peer (P2P) communication since the peers involved in the network may not be reachable at a globally valid IP (Internet Protocol) address.
In particular, current Internet address architecture consists of a global address space (i.e., public IP addresses) and many private address spaces (i.e., private IP addresses) interconnected by NATs. Only peers (also termed nodes, clients, etc.) in the global address space can be easily contacted from anywhere in the network, because they have unique, globally routable IP addresses. Peers on private networks can connect to other peers on the same private network and they can usually open TCP (Transmission Control Protocol) or UDP (User Datagram Protocol) connections to established peers in the global address space. However, the current address architecture makes it difficult for two peers on different private networks to contact each other directly or for a peer in a public network to initiate contact with a peer in a private network. In general, this situation exists because NATs allocate temporary public endpoints for outgoing connections and translate the addresses and port numbers in packets comprising those sessions, while usually blocking all incoming traffic unless otherwise configured.
Many techniques have been proposed to overcome the direct peer-to-peer communication difficulties but they are not typically universally applicable since NAT behavior is not standardized